home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / rbbs_pc / 173_asm.arc / PC-NET.ASM < prev    next >
Assembly Source File  |  1985-11-06  |  5KB  |  86 lines

  1. CSEG     SEGMENT BYTE PUBLIC 'CODE'
  2.          ASSUME  CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG
  3.          PUBLIC  LPLKIT
  4.          PUBLIC  LOKIT
  5.          PUBLIC  UNLOKIT
  6. LOOPLOCK EQU     0
  7. LOCK     EQU     1
  8. UNLOCK   EQU     2
  9. REQUEST  DB      ?                 ; TYPE OF REQUEST
  10. DRIVE    DB      ?                 ; INPUT DRIVE NUMBER
  11. LENLOK   DW      ?                 ; LENGTH OF LOCK NAME
  12. POINTER  DW      ?                 ; POINTER TO LOCK NAME
  13. LOCKNAME DB      64 DUP(?)         ; INPUT LOCK NAME
  14. NEWNAME  DB      '\'               ; REBUILT LOCK NAME WITH PATH
  15. CURPATH  EQU     $                 ; CURRENT PATH FOR INPUT DRIVE
  16.          DB      64 DUP(?)         ; REBUILT LOCK NAME WITH PATH
  17. LENPATH  EQU     $-CURPATH
  18. LPLKIT   PROC    FAR
  19.          MOV     CS:REQUEST,LOOPLOCK
  20.          JMP     PROCESS
  21. LPLKIT   ENDP
  22. LOKIT    PROC    FAR
  23.          MOV     CS:REQUEST,LOCK
  24.          JMP     PROCESS
  25. LOKIT    ENDP
  26. UNLOKIT  PROC    FAR
  27.          MOV     CS:REQUEST,UNLOCK
  28. PROCESS:
  29.          PUSH    BP                ; SAVE BP
  30.          MOV     BP,SP             ; SAVE SP INTO BP FOR PARM ADDRESSING
  31.          PUSH    DS                ; SAVE BASIC'S DATA SEGMENT
  32.          PUSH    ES                ; SAVE BASIC'S EXTRA SEGMENT
  33.          MOV     BX,[BP+8]         ; GET ADDRESS OF STRING DESCRIPTOR
  34.          MOV     DX,[BX+2]         ; GET ADDRESS OF STRING
  35.          MOV     CS:POINTER,DX     ; SAVE POINTER TO STRING
  36.          MOV     CX,[BX]           ; GET LENGTH OF STRING
  37.          MOV     CS:LENLOK,CX      ; SAVE LENGTH OF THE STRING
  38.          MOV     BX,[BP+10]        ; GET ADDRESS OF DRIVE NUMBER
  39.          MOV     AL,[BX]           ; GET LOW ORDER BYTE OF DRIVE ADDRESS
  40.          MOV     CS:DRIVE,AL       ; SAVE THE DRIVE NUMBER
  41.          PUSH    CS                ; MOV CS TO ES VIA STACK
  42.          POP     ES                ; TARGET IS IN OUR CSEG
  43.          MOV     SI,DX             ; OFFSET OF BASIC'S STRING
  44.          MOV     DI,OFFSET LOCKNAME; OFFSET OF WORK AREA
  45.          CLD                       ; START FROM THE BOTTOM
  46.          REP     MOVSB             ; COPY BASIC'S STRING TO OUR WORK AREA
  47.          PUSH    CS                ; MOV CS TO DS VIA STACK
  48.          POP     DS                ; OUR CSEG SEGMENT INTO DS
  49.          MOV     DI,OFFSET CURPATH ; ADDRESS OF AREA TO BLANK
  50.          MOV     CX,LENPATH        ; LENGTH OF AREA TO BLANK
  51.          MOV     AL,' '            ; A BLANK (NATURALLY)
  52.          REP     STOSB             ; BLANK THE AREA OUT
  53.          MOV     SI,OFFSET CURPATH ; SET UP FOR CURRENT PATH CALL
  54.          MOV     AH,47H            ; ASK FOR CURRENT PATH
  55.          MOV     DL,DRIVE          ; REQUEST PATH FOR INDICATED DRIVE
  56.          INC     DL                ; 1 ORIGIN FOR PATH CALL
  57.          INT     21H               ; CALL DOS
  58.          MOV     DI,OFFSET CURPATH ; START SCAN FOR ZERO BYTE AT START OF PATH
  59.          CMP     BYTE PTR [DI],0   ; SEE IF WE ARE IN THE BASE DIRECTORY
  60.          JE      ROOT              ; IF [DI]=0 THEN WE ARE IN THE BASE DIR
  61.          MOV     CX,LENPATH        ; ONLY GO FOR LENGTH OF PATH
  62.          SUB     AL,AL             ; SCANNING FOR THE 0 BYTE
  63.          REPNE   SCASB             ; SCAN THE STRING WHILE [DI] <> 00H
  64.          DEC     DI
  65.          MOV     BYTE PTR [DI],'\' ; PUT IN THE ENDING '\' BEFORE FILE NAME
  66.          INC     DI                ; DI NOW POINTS TO THE ENDING 0
  67. ROOT:
  68.          MOV     SI,OFFSET LOCKNAME+2 ; START MOVE AFTER THE ':'
  69.          MOV     CX,LENLOK         ; LENGTH OF STRING
  70.          DEC     CX                ; MINUS 1
  71.          DEC     CX                ; MINUS 1
  72.          REP     MOVSB             ; COPY FILENAME AFTER PATH NAME
  73.          MOV     DX,OFFSET NEWNAME ; POINT TO NEW NAME
  74.          MOV     AL,DRIVE          ; GET DRIVE FOR LOCK
  75.          MOV     AH,REQUEST        ; RETRIEVE LOCK REQUEST TYPE
  76.          INT     67h               ; CALL LOCK MANAGER
  77.          POP     ES                ; GET BACK BASIC'S EXTRA SEGMENT
  78.          POP     DS                ; GET BACK BASIC'S DATA SEGMENT
  79.          MOV     DI,[BP+6]         ; GET ADDRESS OF RESULT VARIABLE
  80.          MOV     [DI],AL           ; STORE RETURN CODE FROM LOCK MANAGER
  81.          POP     BP
  82.          RET     6
  83. UNLOKIT  ENDP
  84. CSEG     ENDS
  85.          END
  86.